home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Pascal / Snippets / PNL Libraries / Libraries / SpriteWorld / SpriteWorld files / Interfaces / Sprite.p < prev    next >
Text File  |  1996-11-24  |  9KB  |  177 lines

  1. {/--------------------------------------------------------------------------------------}
  2. {    Sprite.h}
  3. {}
  4. {    Portions are copyright: c 1991-94 Tony Myles, All rights reserved worldwide.}
  5. {}
  6. {    Description:    constants, structures, and prototypes for sprites}
  7. {/--------------------------------------------------------------------------------------}
  8.  
  9. unit Sprite;
  10.  
  11. interface
  12.  
  13.     uses
  14. {$IFC undefined THINK_Pascal}
  15.         Types, 
  16. {$ENDC}
  17.         QDOffscreen, SWCommonHeaders, SpriteFrame;
  18.  
  19. {$PUSH}
  20. {$ALIGN MAC68K}
  21.  
  22.  
  23. {/--------------------------------------------------------------------------------------}
  24. {    sprite type definitions}
  25. {/--------------------------------------------------------------------------------------}
  26.  
  27.     type
  28.         RemovalType = SignedByte;
  29.     const
  30.         kSWDontRemoveSprite = 0;
  31.         kSWRemoveSprite = 1;
  32.         kSWRemoveAndDisposeSprite = 2;
  33.  
  34.     type
  35.         SpritePtr = ^SpriteRec;
  36.         SpritePHdl = ^SpritePtr;
  37.         RectArrayPtr = ^RectArray;
  38.         RectArrayHdl = ^RectArrayPtr;
  39.  
  40. {$IFC undefined THINK_Pascal}
  41.         FrameProcPtr = procedure (srcSpriteP: SpritePtr; curFrameP: FramePtr; var frameIndex: longint );
  42.         DrawProcPtr = procedure (srcFrameP: FramePtr; dstFrameP: FramePtr; var srcRect: Rect; var dstRect: Rect);
  43.         MoveProcPtr = procedure (srcSpriteP: SpritePtr );
  44.         CollideProcPtr = procedure ( srcSpriteP: SpritePtr; dstSpriteP: SpritePtr; var sectRect: Rect );
  45. {$ELSEC}
  46.         FrameProcPtr = ProcPtr;
  47.         DrawProcPtr = ProcPtr;
  48.         MoveProcPtr = ProcPtr;
  49.         CollideProcPtr = ProcPtr;
  50. {$ENDC}
  51.  
  52.         FramePtrArray = array[0..0] of FramePtr;
  53.         FramePtrArrayPtr = ^FramePtrArray;
  54.  
  55. {/--------------------------------------------------------------------------------------}
  56. {    Rect array data structure}
  57. {/--------------------------------------------------------------------------------------}
  58.  
  59.         RectArray = record
  60.                 numFrames: Integer;
  61.                 frameRects: array[0..0] of Rect;
  62.             end;
  63.  
  64. {/--------------------------------------------------------------------------------------}
  65. {    sprite data structure}
  66. {/--------------------------------------------------------------------------------------}
  67.  
  68.         SpriteRec = record
  69.                 nextSpriteP: SpritePtr;                    { next sprite in that layer}
  70.                 prevSpriteP: SpritePtr;                    { previous sprite in that layer}
  71.                 nextActiveSpriteP: SpritePtr;            { next active sprite in the SpriteWorld}
  72.                 nextIdleSpriteP: SpritePtr;                { next idle sprite in the SpriteWorld}
  73.  
  74.         { drawing fields}
  75.                 isVisible: Boolean;                    { draw the sprite?}
  76.                 needsToBeDrawn: Boolean;            { sprite has changed, needs to be drawn}
  77.                 needsToBeErased: Boolean;            { sprite needs to be erased onscreen}
  78.                 isUnderTiles: Boolean;                { is the sprite behind the tiles?}
  79.                 destFrameRect: Rect;                { frame destination rectangle}
  80.                 oldFrameRect: Rect;                { last frame destination rectangle}
  81.                 deltaFrameRect: Rect;            { union of the sprite's lastRect and curRect}
  82.                 frameDrawProc: DrawProcPtr;                { callback to draw sprite}
  83.  
  84.         { drawing fields for scrolling routines}
  85.                 clippedSourceRect: Rect;            { source sprite frame rect after clipping}
  86.                 destOffscreenRect: Rect;            { sprite's dest rect after clipping and offset}
  87.                 oldOffscreenRect: Rect;                { the destOffscreenRect from the previous frame}
  88.                 destRectIsVisible: Boolean;            { is destOffscreenRect visible on screen?}
  89.                 oldRectIsVisible: Boolean;                { was oldOffscreenRect visible on screen?}
  90.  
  91.         { frame fields}
  92.                 frameArray: FrameArrayPtr;            { array of frames}
  93.                 curFrameP: FramePtr;                { current frame}
  94.                 numFrames: LongInt;                { number of frames}
  95.                 maxFrames: LongInt;                { maximum number of frames}
  96.                 frameTimeInterval: LongInt;    { time interval to advance frame}
  97.                 timeOfLastFrameChange: LongInt; { time (from runningTimeCount) frame was last changed}
  98.                 frameAdvance: LongInt;            { amount to adjust frame index}
  99.                 curFrameIndex: LongInt;            { current frame index}
  100.                 firstFrameIndex: LongInt;        { first frame to advance}
  101.                 lastFrameIndex: LongInt;        { last frame to advance}
  102.                 frameChangeProc: FrameProcPtr;        { callback to change frames}
  103.  
  104.         { movement fields}
  105.                 moveTimeInterval: LongInt;            { time interval to move sprite}
  106.                 timeOfLastMove: LongInt;            { time (from runningTimeCount) sprite was last moved}
  107.                 horizMoveDelta: Integer;            { horizontal movement delta}
  108.                 vertMoveDelta: Integer;                { vertical movement delta}
  109.                 moveBoundsRect: Rect;            { bounds of the sprite's movement}
  110.                 spriteMoveProc: MoveProcPtr;            { callback to handle movement}
  111.  
  112.         { collision detection}
  113.                 spriteCollideProc: CollideProcPtr;    { callback to handle collisions}
  114.  
  115.         { miscellaneous}
  116.                 sharedPictGWorld: GWorldPtr;            { if common GWorld used for frames, here it is}
  117.                 sharedMaskGWorld: GWorldPtr;            { same for mask}
  118.                 spriteRemoval: RemovalType;                { whether to remove sprite, and if so how}
  119.  
  120.                 userData: LongInt;                    { reserved for user}
  121.             end;
  122.  
  123.     function SWCreateSprite (var newSpriteP: SpritePtr; spriteStorageP: Ptr; maxFrames: Integer): OSErr;
  124.     function SWCreateSpriteFromCicnResource (destSpriteWorld: SpriteWorldPtr; var newSpriteP: SpritePtr; spriteStorageP: Ptr; cIconID: Integer; maxFrames: Integer; maskKind: MaskType): OSErr;
  125.     function SWCreateSpriteFromPictResource (destSpriteWorld: SpriteWorldPtr; var newSpriteP: SpritePtr; spriteStorageP: Ptr; pictResID: Integer; maskResID: Integer; maxFrames: Integer; maskKind: MaskType): OSErr;
  126.     function SWCreateSpriteFromSinglePict (destSpriteWorld: SpriteWorldPtr; var newSpriteP: SpritePtr; spriteStorageP: Ptr; pictResID: Integer; maskResID: Integer; frameWidth: Integer; maskKind: MaskType): OSErr;
  127.     function SWCreateSpriteFromSinglePictXY (destSpriteWorld: SpriteWorldPtr; var newSpriteP: SpritePtr; spriteStorageP: Ptr; pictResID: Integer; maskResID: Integer; frameWidth: Integer; frameHeight: Integer; borderWidth: Integer; MaxFrames: Integer; maskKind: MaskType): OSErr;
  128.     function SWUpdateSpriteFromPictResource (theSpriteP: SpritePtr; pictResID: Integer): OSErr;
  129.  
  130.     function SWCloneSprite (cloneSpriteP: SpritePtr; var newSpriteP: SpritePtr; spriteStorageP: Ptr): OSErr;
  131.     procedure SWRemoveSpriteFromAnimation (spriteWorldP: SpriteWorldPtr; spriteP: SpritePtr; disposeOfSprite: Boolean);
  132.     procedure SWDisposeSprite (oldSpriteP: SpritePtr);
  133.     procedure SWCloseSprite (deadSpriteP: SpritePtr);
  134.     procedure SWLockSprite (srcSpriteP: SpritePtr);
  135.     procedure SWUnlockSprite (srcSpriteP: SpritePtr);
  136.  
  137.     function SWSetSpriteDrawProc (srcSpriteP: SpritePtr; drawProc: DrawProcPtr): OSErr;
  138.     procedure SWStdSpriteDrawProc (srcFrameP: FramePtr; dstFrameP: FramePtr; var srcRect: Rect; var dstRect: Rect);
  139.  
  140.     function SWAddFrame (srcSpriteP: SpritePtr; newFrameP: FramePtr): OSErr;
  141.     procedure SWRemoveFrame (srcSpriteP: SpritePtr; oldFrameP: FramePtr);
  142.  
  143.     procedure SWSetCurrentFrame (srcSpriteP: SpritePtr; curFrameP: FramePtr);
  144.     procedure SWSetCurrentFrameIndex (srcSpriteP: SpritePtr; frameIndex: Integer);
  145.     procedure SWSetSpriteFrameAdvance (srcSpriteP: SpritePtr; frameAdvance: Integer);
  146.     procedure SWSetSpriteFrameRange (srcSpriteP: SpritePtr; firstFrameIndex: Integer; lastFrameIndex: Integer);
  147.     procedure SWSetSpriteFrameTime (srcSpriteP: SpritePtr; timeInterval: LongInt);
  148.     procedure SWSetSpriteFrameProc (srcSpriteP: SpritePtr; frameProc: FrameProcPtr);
  149.  
  150.     procedure SWMoveSprite (srcSpriteP: SpritePtr; horizLoc: Integer; vertLoc: Integer);
  151.     procedure SWOffsetSprite (srcSpriteP: SpritePtr; horizOffset: Integer; vertOffset: Integer);
  152.     procedure SWSetSpriteLocation (srcSpriteP: SpritePtr; horizLoc: Integer; vertLoc: Integer);
  153.     procedure SWSetSpriteMoveBounds (srcSpriteP: SpritePtr; var moveBoundsRect: Rect);
  154.     procedure SWSetSpriteMoveDelta (srcSpriteP: SpritePtr; horizDelta: Integer; vertDelta: Integer);
  155.     procedure SWSetSpriteMoveTime (srcSpriteP: SpritePtr; timeInterval: LongInt);
  156.     procedure SWSetSpriteMoveProc (srcSpriteP: SpritePtr; moveProc: MoveProcPtr);
  157.  
  158.     procedure SWBounceSprite (srcSpriteP: SpritePtr);
  159.     procedure SWWrapSprite (srcSpriteP: SpritePtr);
  160.     procedure SWSetSpriteCollideProc (srcSpriteP: SpritePtr; collideProc: CollideProcPtr);
  161.     function SWRegionCollision (srcSpriteP: SpritePtr; dstSpriteP: SpritePtr): Boolean;
  162.     function SWRadiusCollision (srcSpriteP: SpritePtr; dstSpriteP: SpritePtr): Boolean;
  163.     function SWPixelCollision (srcSpriteP: SpritePtr; dstSpriteP: SpritePtr): Boolean;
  164.  
  165.     procedure SWSetSpriteVisible (srcSpriteP: SpritePtr; isVisible: Boolean);
  166.     function SWIsSpriteInRect (srcSpriteP: SpritePtr; var testRect: Rect): Boolean;
  167.     function SWIsSpriteFullyInRect (srcSpriteP: SpritePtr; var testRect: Rect): Boolean;
  168.     function SWIsPointInSprite (srcSpriteP: SpritePtr; testPoint: Point): Boolean;
  169.  
  170. {$ALIGN RESET}
  171. {$POP}
  172.  
  173. {$IFC not undefined THINK_Pascal}
  174. implementation
  175. {$ENDC}
  176. end.
  177.